/*
* Copyright (c) 2014 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.evolveum.midpoint.prism.lex;
import static com.evolveum.midpoint.prism.PrismInternalTestUtil.USER_JACK_FILE_BASENAME;
import static com.evolveum.midpoint.prism.PrismInternalTestUtil.displayTestTitle;
import static org.testng.AssertJUnit.assertEquals;
import java.io.IOException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.validation.Schema;
import javax.xml.validation.Validator;
import com.evolveum.midpoint.prism.ParsingContext;
import com.evolveum.midpoint.prism.lex.dom.DomLexicalProcessor;
import org.testng.annotations.Test;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.foo.UserType;
import com.evolveum.midpoint.prism.util.PrismTestUtil;
import com.evolveum.midpoint.prism.xnode.ListXNode;
import com.evolveum.midpoint.prism.xnode.MapXNode;
import com.evolveum.midpoint.prism.xnode.PrimitiveXNode;
import com.evolveum.midpoint.prism.xnode.RootXNode;
import com.evolveum.midpoint.prism.xnode.XNode;
import com.evolveum.midpoint.util.DOMUtil;
/**
* @author semancik
*
*/
public class TestDomParser extends AbstractLexicalProcessorTest {
@Override
protected String getSubdirName() {
return "xml";
}
@Override
protected String getFilenameSuffix() {
return "xml";
}
@Override
protected DomLexicalProcessor createParser() {
return new DomLexicalProcessor(PrismTestUtil.getSchemaRegistry());
}
@Test
public void testParseUserToXNode() throws Exception {
final String TEST_NAME = "testParseUserToXNode";
displayTestTitle(TEST_NAME);
// GIVEN
DomLexicalProcessor parser = createParser();
// WHEN
XNode xnode = parser.read(getFile(USER_JACK_FILE_BASENAME), ParsingContext.createDefault());
// THEN
System.out.println("Parsed XNode:");
System.out.println(xnode.debugDump());
RootXNode root = getAssertXNode("root node", xnode, RootXNode.class);
MapXNode rootMap = getAssertXNode("root subnode", root.getSubnode(), MapXNode.class);
PrimitiveXNode<String> xname = getAssertXMapSubnode("root map", rootMap, UserType.F_NAME, PrimitiveXNode.class);
// TODO: assert value
ListXNode xass = getAssertXMapSubnode("root map", rootMap, UserType.F_ASSIGNMENT, ListXNode.class);
assertEquals("assignment size", 2, xass.size());
// TODO: asserts
MapXNode xextension = getAssertXMapSubnode("root map", rootMap, UserType.F_EXTENSION, MapXNode.class);
}
private void validateSchemaCompliance(String xmlString, PrismContext prismContext) throws SAXException, IOException {
// Document xmlDocument = DOMUtil.parseDocument(xmlString);
// Schema javaxSchema = prismContext.getSchemaRegistry().getJavaxSchema();
// Validator validator = javaxSchema.newValidator();
// validator.setResourceResolver(prismContext.getEntityResolver());
// validator.validate(new DOMSource(xmlDocument));
}
@Override
protected void validateUserSchema(String xmlString, PrismContext prismContext) throws SAXException, IOException {
validateSchemaCompliance(xmlString, prismContext);
}
@Override
protected void validateResourceSchema(String xmlString, PrismContext prismContext) throws SAXException, IOException {
validateSchemaCompliance(xmlString, prismContext);
}
@Override
protected String getWhenItemSerialized() {
return "<when>2012-02-24T10:48:52.000Z</when>";
}
}